//
//  XHTabBar.swift
//  weibobbaj
//
//  Created by Tiffany宝 on 16/4/16.
//  Copyright © 2016年 Tiffany. All rights reserved.
//

import UIKit

class XHTabBar: UITabBar {
    
    //定义一个闭包属性(因为闭包传的东西会改变,所以不能用let
    var composeIconButtonClosure: (() -> ())?
    
    override init(frame: CGRect) {
        super.init(frame: frame)
        
//        print(composeIconButton)
        
        addSubview(composeIconButton)
        
        //这里还没有布局子控件,所以只有刚刚添加的按钮
//        for value in subviews{
//            
//            print(value)
//        }
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //在布局子控件的时候 布局按钮
    override func layoutSubviews() {
        super.layoutSubviews()
        
        composeIconButton.center = CGPoint(x: self.bounds.width * 0.5, y: self.bounds.height * 0.5)
        
//        print("========")
        
        //定义下标索引
        var index: Int = 0
        
        // UITabBarButton 是私有的控件,无法通过 UITabBarButton class 来获取类
        for value in subviews{
            
//            print(value)
            let ButtonW = self.bounds.width / 5
            
            
            if value.isKindOfClass(NSClassFromString("UITabBarButton")!){
                
                let ButtonX = CGFloat(index) * ButtonW
                
                index++
                
                if index == 2{
                    index++
                }
                
                value.frame = CGRect(x: ButtonX, y: 0, width: ButtonW, height: self.bounds.height)
            }
        }
    }
    
    // MARK: - 监听方法
    @objc private func didClickComposeIconButton(){
        
        composeIconButtonClosure?()
    }
    
    // MARK: - 懒加载Button
    lazy var composeIconButton:UIButton = {
    
        let button = UIButton()
        
        //    不希望暴露的方法，应该使用 private 修饰符
        //    按钮点击事件的调用是由 运行循环 监听并且以消息机制传递的
        //    而Swift为了追求性能的这个特性决定了其在编译时期就已经决定好了某个事件该如何去调用
        //    而使用 private 修饰的方法在运行的时候对于运行循环是不可见的，所以会提示 找不到xxx方法
        //    可以使用 @objc 修饰此私有方法，其在于告诉系统此方法使用 Objective-C 的基于运行时的机制（KVC以及动态派发）
        
        //监听按钮点击
        button.addTarget(self, action: "didClickComposeIconButton", forControlEvents: UIControlEvents.TouchUpInside)
        
        //设置按钮的图片
        let imageName = "tabbar_compose_icon_add"
        button.setImage(UIImage(named: imageName), forState: UIControlState.Normal)
        button.setImage(UIImage(named: imageName + "highlighted"), forState: UIControlState.Highlighted)
        
        let backImageName = "tabbar_compose_button"
        button.setBackgroundImage(UIImage(named: backImageName), forState: UIControlState.Normal)
        button.setBackgroundImage(UIImage(named: backImageName + "highlighted"), forState: UIControlState.Highlighted)
        
        //设置按钮的大小
        button.sizeToFit()
        
//        self.addSubview(button)

        return button
    }()
}
